

// token  
// 令牌   校验是否有效的访问者  
// token  是后端生成  加密生成  返回给前端  
// 前端 要把token 存储本地 sessionStorage  
// 每次ajax 前端要把token  返回给后端
// 后端 先要判断 token 是否有效准确  

var jwt = require("jsonwebtoken");

var secret = "wuhan2004-daydayup"; // 秘钥

// var data = {    // 需要加密的字段 
//     username:"zuozuomu",
//     password:"abc123",
// }

var createToken  = function(data){
    return jwt.sign(data,secret,{expiresIn:"2h"});
}


exports.createToken = createToken;

// token 解密  
var decodeToken = function(token){
    return new Promise(function(resolve,reject){
        jwt.verify(token,secret,(err,data)=>{
            if(err){
                reject(err);  
            }else{
                 // 解密后的明文 
                resolve(data);
            }
        })
    })
}
// 检查token 是否有效
// 1. token 不存在
// 2. token 过期
// 3. token 不正确 
var checkToken = function(req,res,callback){
    var token = req.headers.token;  // 接受前端发送过来的token  马上进行判断  
    if(token){
        decodeToken(token)
        .then(data=>{
            console.log(data);
            callback(data);  // 解密成功的回调 
        })
        .catch(err=>{
            console.log(err);
            res.json({
                code:3200,
                msg:"token无效,请立即登录",
                err,
                type:0,
            })
        })

    }else{
        res.json({
            code:3200,
            msg:"token不存在,请立即登录",
            type:0,
        })
    }
}

exports.checkToken = checkToken;